package com.yanggu.spark.core.rdd.action

import org.apache.spark.{SparkConf, SparkContext}

//Action算子-Aggregate
object RDD33_Aggregate {

  def main(args: Array[String]): Unit = {

    //1. 创建sparkConf配置对象
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("spark")

    //2. 创建spark上下文对象
    val sparkContext = new SparkContext(sparkConf)

    //3. 从内存中创建RDD
    val value = sparkContext.makeRDD(List[Int](1, 2, 3, 4, 5), 8)

    //4. Aggregate算子。行动算子
    //函数声明
    //def aggregate[U: ClassTag](zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U) => U): U
    //第一个参数zeroValue 初始值
    //第二个参数seqOp: (U, T) => U 分区内的数据进行操作 T表示循环遍历的时候传入的值
    //第三个参数combOp: (U, U) => U 分区间的数据进行操作
    val sum = value.aggregate(0)(_ + _, _ + _)

    //5. 打印
    println(sum)

    //6. 释放资源
    sparkContext.stop()
  }

}
